package ren.wxyz.algorithm.fouriertransform;

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 
 * @author zxwang
 * @Datetime 2014年11月30日 下午9:23:38
 */
public class ShowWave {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ShowWaveFrame frame = new ShowWaveFrame();
		frame.setVisible(true);
	}
	
	/**
	 * 画波
	 * @author zxwang
	 * @Datetime 2014年11月30日 下午9:27:44
	 */
	static class ShowWaveFrame extends JFrame {
		private static final long serialVersionUID = -8377114201825927697L;
		
		public ShowWaveFrame() {
			this.setTitle("显示波");
			ShowWavePanel panel = new ShowWavePanel();
			this.setContentPane(panel);
			this.setSize(500, 300);
			this.setLocation(260, 150);
			this.setResizable(false);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
	}
	
	/**
	 * 具体的画波的控件
	 * 
	 * @author zxwang
	 * @Datetime 2014年11月30日 下午9:29:15
	 */
	static class ShowWavePanel extends JPanel {
		private static final long serialVersionUID = -2958040144367893948L;
		
		@Override
		public void paint(Graphics g) {
			super.paint(g);
//			g.drawOval(0, 0, 30, 30);
			
			int zeroX = Math.round(this.getWidth() * 1.0f / 2);
			int zeroY = Math.round(this.getHeight() * 1.0f / 2);
			
			paintCoordinateSystem(g, zeroX, zeroY, zeroX - 2, zeroY - 2);
			
		}
		
		/**
		 * 画直角坐标系
		 * @param g
		 * @param zeroX 坐标系零点的x方向的位置
		 * @param zeroY 坐标系零点的y方向的位置
		 * @param xLen X轴正向长度
		 * @param yLen Y轴正向长度
		 */
		void paintCoordinateSystem(Graphics g, int zeroX, int zeroY, int xLen, int yLen) {
			int width = xLen * 2 - 1;
			int height = yLen * 2 - 1;
			// 这几个常数是验证出来的
			// 空白长度
			int blankLen = 5;
			// 箭头的长度
			int arrowLength = 4;
			// 箭头的高度
			int arrowHeight = 4;
			
			// X轴
			g.drawLine(blankLen, zeroY, width - blankLen, zeroY);
			g.drawLine(width - blankLen - arrowLength, zeroY - arrowHeight, width - blankLen, zeroY);
			g.drawLine(width - blankLen - arrowLength, zeroY + arrowHeight, width - blankLen, zeroY);
			// 这几个常数是验证出来的
			g.drawString("X", width - blankLen - 8, zeroY + 17);
			
			// Y轴
			g.drawLine(zeroX, blankLen, zeroX, height - blankLen);
			g.drawLine(zeroX - arrowHeight, blankLen + arrowLength, zeroX, blankLen);
			g.drawLine(zeroX + arrowHeight, blankLen + arrowLength, zeroX, blankLen);
			// 这几个常数是验证出来的
			g.drawString("Y", zeroX - 12, blankLen + 10);
			
			// 轴心
			g.drawString("0", zeroX + 3, zeroY + 13);
			g.fillOval(zeroX - 2, zeroY - 2, 4, 4);
		}
	}

}
